package rs.in.idemdo;

import java.util.Vector;

import org.restlet.resource.ClientResource;
import org.restlet.resource.ResourceException;

import restlet.interfaces.PlaceResourceI;
import restlet.interfaces.TripLineResourceI;
import rs.in.idemdo.db.IdemDoDbAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import beans.MestoBean;

public class IdemDoActivity extends Activity {

	private static final int PODESAVANJA = Menu.FIRST;
	private IdemDoDbAdapter mDbAdapter;
	
	private int mVerzija_liste_mesta_server;
	
	/** The progress dialog used during the interactions with the server. */
	private ProgressDialog mProgresDijalog;
	
	/** Dijalog za prijavljivanje greske */
	private AlertDialog mAlertDijalog;

	private PlaceResourceI mMestaResurs;
	private Vector<MestoBean> mMesta;
	private ProgressDialog progressDialog;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mDbAdapter = new IdemDoDbAdapter(this);
		setContentView(R.layout.idemdo);

		//inicijalizacijaMestaUBazi();

		// OVO IDE ZAJEDNO
		// Inicijalizacija komunikacije
		// ClientResource cr = new ClientResource(getString(R.string.server_url)
		// + "rest/places");
		// mMestaResurs = cr.wrap(PlaceResourceI.class);
		// progressDialog = ProgressDialog.show(this,
		// "Pribavljanje novih podataka",
		// "Učitavanje...", true, false);
		// new DobaviMestaTask().execute(new Void[] {});
	}

	/** Pozadinski proces koji dobavlja podatke sa servera */
	@SuppressWarnings("unused")
	private class DobaviMestaTask extends AsyncTask<Void, Void, Integer> {
		protected Integer doInBackground(Void... args) {
			int rezultat = 0;
			try {
//				mMesta = mMestaResurs.allPlaces();
//				mDbAdapter.open();
//				
//				for(MestoBean m:mMesta)
//				{
//					mDbAdapter.createMesto(m.getNaziv(), m.getNaziv().substring(0, 2));
//				}
//				
//				mDbAdapter.setVerzijaMesta(mVerzija_liste_mesta_server);
			} catch (ResourceException e) {
				rezultat = 1;
			}
			return rezultat;
		}

		protected void onPostExecute(Integer result) {
			mProgresDijalog.dismiss();
			switch (result) {
			case 1:
				mAlertDijalog
						.setMessage(getString(R.string.greska_rezultati_pretrage));
				mAlertDijalog.show();
				break;
			default:
				break;
			}
		}
	}

	public void naprednaPretraga(View view) {
		Intent i = new Intent(this, IzborMestaActivity.class);
		startActivity(i);
	}

	public void listaPutovanja(View view) {
		Intent i = new Intent(this, ListaPutovanjaActivity.class);
		startActivity(i);
	}

	public void brzaPretraga(View view) {
		Intent i = new Intent(this, BrzaPretragaActivity.class);
		startActivity(i);
	}

	@Override
	protected void onPause() {
		mDbAdapter.close();
		super.onPause();
	}
	
	
	@Override
	protected void onResume() {
		mDbAdapter.open();
		super.onResume();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menu.add(0, PODESAVANJA, 0, R.string.podesavanja);
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
		case PODESAVANJA:
			Intent i = new Intent(this, PodesavanjaActivity.class);
			startActivity(i);
			return true;
		}

		return super.onMenuItemSelected(featureId, item);
	}

	private void inicijalizacijaMestaUBazi() {
		//Cursor cursor = mDbAdapter.fetchInfo(IdemDoDbAdapter.INFO_CONST_VERZIJA_LISTE_MESTA);
		
		final IdemDoDbAdapter idemDoDbAdapter = mDbAdapter;
		idemDoDbAdapter.obrisiSveTabeleIKreirajPonovo();
		idemDoDbAdapter.open();
		
		Cursor cursor = idemDoDbAdapter.fetchInfo(IdemDoDbAdapter.INFO_CONST_VERZIJA_LISTE_MESTA);
		
		ClientResource cr = new ClientResource(getString(R.string.server_url)+ "rest/places");
		mMestaResurs = cr.wrap(PlaceResourceI.class);
		mVerzija_liste_mesta_server = mMestaResurs.getVersion();
		
		if (cursor != null) {
			
			// ako ne postoji red sa tom vrednosti, znaci da treba da se dobave
			if (!cursor.moveToFirst()) {
				// inicijalizuj tabelu mesta
				
				// OVO IDE ZAJEDNO
				 //Inicijalizacija komunikacije
				 mMestaResurs = cr.wrap(PlaceResourceI.class);
				 progressDialog = ProgressDialog.show(this,"Pribavljanje novih podataka","Učitavanje...", true, false);
				 //new DobaviMestaTask().execute(new Void[] {});
				 stanicevaEmulator();
			} 
			else
			// ako postoji taj red u tabeli, proveri da li je azurna verzija
			{
				final int verzijaTabeleMesto = cursor.getInt(cursor.getColumnIndex(IdemDoDbAdapter.INFO_VREDNOST_PARAMETRA_INT));
				// ako je azurna
				if (mVerzija_liste_mesta_server==verzijaTabeleMesto) {
					//nikom nista
				}
				// ako nije
				else {
					//zovemo task i u njemu setujemo verziju
					//new DobaviMestaTask().execute(new Void[] {});
					stanicevaEmulator();
				}
			}
		}
	}
	
	private void stanicevaEmulator()
	{
		//mMesta
		Object a = mMestaResurs.allPlaces();
		Integer i = (Integer) a;
		Button b = (Button)findViewById(R.id.btn_putovanja);
		mDbAdapter.open();
		
		for(MestoBean m:mMesta)
		{
			mDbAdapter.createMesto(m.getNaziv(), m.getNaziv().substring(0, 2));
		}
		
		mDbAdapter.setVerzijaMesta(mVerzija_liste_mesta_server);
	}
}
